home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
utils
/
mouse
/
mouse.asm
< prev
next >
Wrap
Assembly Source File
|
1980-01-03
|
5KB
|
226 lines
;
; ### Mouse v 1.25 ###
;
; - Created 881021 by TM -
;
;
; NOTES:
;
;
; BUGS:
;
; - None, I hope
;
;
; Edited:
;
; - 881217 by TM -> v0.60 - Code compressed from 1408 to 900 bytes.
; - 881217 by JM -> v0.80 - Code compressed from 900 to 724 bytes.
; - 881217 by JM -> v1.00 - Code commented and compressed to 720 bytes.
; - 881224 by JM -> v1.10 - Some structure offsets changed to labels.
; - Executable now 716 bytes.
; - 881224 by JM -> v1.15 - Crunching, version id added.
; Executable 688 bytes only.
; - 881225 by JM -> v1.20 - A bug fixed with NEWLIST macro. Executable
; 692 bytes.
; - 881227 by JM -> v1.25 - LN_PRI and LN_NAME set to NULL. Executable
; 700 bytes.
;
;
include "jmplibs.i"
include "exec/types.i"
include "exec/nodes.i"
include "exec/lists.i"
include "exec/ports.i"
include "exec/io.i"
include "devices/input.i"
include "com.i"
include "exec.xref"
include "dos.xref"
include "relative.i"
include "string.i"
include "intuition.xref"
RELATIVE equ -1 allocates memory from stack
*
* Variables allocated from stack:
*
.var
dl _DosBase,_IntuitionBase
dl cmdbuf
dl ODerror,ASerror
dw mouseport
da iorequest,48
da msgport,34
da prefs,128
start .begin
move.l a0,cmdbuf(a4) start of command line buffer
clr.b -1(a0,d0.w)
openlib Dos,clean open libraries
openlib Intuition,clean
lea prefs(a4),a0 get current Preferences settings
moveq #116,d0
lib Intuition,GetPrefs
move.l cmdbuf(a4),a5 check if info needed
move.b (a5),d0
cmp.b #'?',d0 '?' -> print usage
beq info
tst.b d0
bne.s mowlawn command not empty -> jump
lea tcmsi(pc),a0 if cmdline is empty...
lea prefs(a4),a1 ...output current mouse speed
move.w 108(a1),d0 current speed from Preferences
cmp.w #9,d0
bhi.s msunkwn more than 9 -> output other msg
lea speedy(pc),a1
or.b d0,(a1) store speed into buffer
bra.s eclean ...and print string
msunkwn lea mt9(pc),a0 mouse is very slow!
bra.s eclean
mowlawn bsr skipblk change settings
move.b (a5)+,d0
beq clean
bsr ucase
mowwell cmp.b #'0',d0 check if speed in allowed range
blo.s mow1
cmp.b #'9',d0
bhi.s mow1
and.w #15,d0 convert to binary
lea prefs(a4),a0
move.w d0,108(a0) write new speed into structure
moveq #116,d0
moveq #-1,d1
lib Intuition,SetPrefs set mouse speed
addq.l #1,a5
bra.s mowlawn
mow1 cmp.b #'S',d0 S command
bne.s mow2
bsr skipblk
move.b (a5)+,d0
beq.s info
bra.s mowwell
mow2 cmp.b #'P',d0 set port - P command
bne.s info
bsr skipblk
move.b (a5)+,d0
sub.b #'1',d0 check if port 1 or 2
blo.s info
cmp.b #1,d0
bhi.s info
bsr mport set port in subrtn
bra.s mowlawn
info lea infotxt(pc),a0 print info text
eclean printa a0 print message
clean closlib Intuition close libraries
closlib Dos
moveq.l #0,d0
.end
skipblk move.b (a5)+,d0 skip blank (SPC/TAB)
cmp.b #' ',d0
beq.s skipblk
cmp.b #9,d0
beq.s skipblk
subq.w #1,a5
rts
ucase cmp.b #'a',d0 convert a char to UPPER CASE
blo.s ucase1
cmp.b #'z',d0
bhi.s ucase1
sub.b #$20,d0
ucase1 rts
*
* This routine sets the mouse port. D0 must contain 0 or 1 for port
* 1 or 2, respectively.
*
mport move.b d0,mouseport(a4)
lea indevname(pc),a0 input.device
moveq.l #0,d0 unit#
lea iorequest(a4),a1 IoReq
moveq.l #0,d1 flags
lib Exec,OpenDevice open input.device
move.l d0,ODerror(a4) error -> ODerror != 0
bne.s mpclean if error
lea msgport(a4),a2
move.b #NT_MSGPORT,LN_TYPE(a2) node type = messageport
clr.b LN_PRI(a2) priority = 0
clr.l LN_NAME(a2) no name
clr.b MP_FLAGS(a2) Flags = 0
moveq.l #-1,d0 get a signal bit
move.l d0,ASerror(a4)
flib Exec,AllocSignal
move.l d0,ASerror(a4) signal bit number or error
bmi.s mpclean
move.b d0,MP_SIGBIT(a2) set signal bit number
sub.l a1,a1
flib Exec,FindTask find this task
move.l d0,MP_SIGTASK(a2) set task pointer
lea MP_MSGLIST(a2),a0
NEWLIST a0 NewList(list) (macro)
move.l a2,d0
lea iorequest(a4),a2
move.l d0,MN_REPLYPORT(a2) set reply port pointer
move.w #IND_SETMPORT,IO_COMMAND(a2) set io_Command
lea mouseport(a4),a0
move.l a0,IO_DATA(a2) io_Data = &mouseport
moveq.l #1,d0
move.l d0,IO_LENGTH(a2) io_Length = 1
move.l a2,a1
flib Exec,DoIO set mouseport
mpclean move.l ODerror(a4),d0 test if input.device open
bne.s mpclea1 no -> don't try to close it
lea iorequest(a4),a1
flib Exec,CloseDevice close input.device
mpclea1 move.l ASerror(a4),d0 test if a signal allocated
bmi.s mpclea2 no -> don't try to free it
flib Exec,FreeSignal free signal
mpclea2 rts
infotxt dc.b 'Mouse v1.25',10
dc.b 'Usage: mouse [P <port>] [[S] <speed>]',10,0
indevname dc.b 'input.device',0
mt9 dc.b 'more than 9',10,0
tcmsi dc.b 'The current mouse speed is '
speedy dc.b '0.',10,0
libnames
end